/*
 * Logger.cpp
 *
 *  Created on: Sep 25, 2011
 *      Author: nicoabie
 */

#include "Logger.h"
#include <iostream>
#include <fstream>
#include "../Constantes.h"

std::ofstream Logger::file;

void Logger::init() {
	file.open (LOG_PATH,std::ios_base::app);
}

void Logger::finish() {
	file.close();
}

void Logger::logBase(LogLevel level,std::string clase, std::string metodo, std::string mensaje) {
	file << Logger::getDateTime();
	file << " - ";
	file << level;
	file << " - ";
	file << Logger::toUpper(clase);
	file <<  " [" << metodo << "]: ";
	file << mensaje << std::endl;
}

void Logger::logBase(LogLevel level,std::string clase, std::string metodo, std::stringstream* mensaje) {
	debug(clase,metodo,mensaje->str());
	mensaje->str(std::string());
}


void Logger::debug(std::string clase, std::string metodo, std::string mensaje) {
	if( logLevelSet <= DEBUG )logBase(DEBUG,clase,metodo,mensaje);
}

void Logger::debug(std::string clase, std::string metodo, std::stringstream* mensaje) {
	if( logLevelSet <= DEBUG )logBase(DEBUG,clase,metodo,mensaje);
}


void Logger::info(std::string clase, std::string metodo, std::string mensaje) {
	if( logLevelSet <= INFO)logBase(INFO,clase,metodo,mensaje);
}

void Logger::info(std::string clase, std::string metodo, std::stringstream* mensaje) {
	if( logLevelSet <= INFO)logBase(INFO,clase,metodo,mensaje);
}


void Logger::trace(std::string clase, std::string metodo, std::string mensaje) {
	if( logLevelSet <= TRACE)logBase(TRACE,clase,metodo,mensaje);
}

void Logger::trace(std::string clase, std::string metodo, std::stringstream* mensaje) {
	if( logLevelSet <= TRACE)logBase(TRACE,clase,metodo,mensaje);
}


void Logger::trace(std::string clase, std::string metodo,TiXmlElement* xmlElement, std::string mensaje) {
	if( logLevelSet <= TRACE){
		file << Logger::getDateTime() << " - " << Logger::toUpper(clase)
			<< " [" << metodo << "]: " <<" Linea xml :[" << xmlElement->Row() << "]: " << mensaje << std::endl;
	}
}

std::string Logger::getDateTime() {
	time_t rawtime;
	time(&rawtime);

	std::string aux = ctime(&rawtime);

	return std::string(aux.substr(0, aux.size() - 1));
}

std::string Logger::toUpper(std::string s) {
	for (size_t i = 0; i < s.length(); ++i) {
		s[i] = toupper(s[i]);
	};

	return s;
}


